package com.ruoyi.common.utils.jm.ofd;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.security.cert.CertificateException;
import java.util.UUID;

import static com.ruoyi.common.utils.file.FileUtils.File2byte;


public class demo {

	public static void main(String[] args) throws Exception {
	//		//以下代码测试生成RSA证书
	//		File f1 = new File("d:/RSACerts/rootrsa_hetong.cer");
	//		FileInputStream fis = new FileInputStream(f1);
	//		int iLen = (int)f1.length();
	//		byte[] bRootCert = new byte[iLen];
	//		fis.read(bRootCert);
	//		fis.close();
	//
	//		f1 = new File("d:/RSACerts/rootrsa_hetong.pfx");
	//		fis = new FileInputStream(f1);
	//		iLen = (int)f1.length();
	//		byte[] bRootPfx = new byte[iLen];
	//		fis.read(bRootPfx);
	//		fis.close();
	//
	//		f1 = new File("d:/RSACerts/rootrsa_hetong.txt");
	//		fis = new FileInputStream(f1);
	//		iLen = (int)f1.length();
	//		byte[] bPin = new byte[iLen];
	//		fis.read(bPin);
	//		fis.close();
	//
	//
	//		try {
	//			CertStruct userCert =  RSACrypto.CreateUserRSAPfx("北京市", "北京市", "北京诚利通数码技术有限公司", "合同演示系统", "张三", bRootCert, bRootPfx, new String(bPin));
	//			if(userCert != null){
	//				File f = new File("d:/RSACerts/test.pfx");
	//				FileOutputStream fos = new FileOutputStream(f);
	//				fos.write(userCert.bPfx);
	//				fos.close();
	//
	//				f = new File("d:/RSACerts/test.cer");
	//				fos = new FileOutputStream(f);
	//				fos.write(userCert.bCert);
	//				fos.close();
	//
	//				f = new File("d:/RSACerts/test.txt");
	//				fos = new FileOutputStream(f);
	//				fos.write(userCert.sPin.getBytes());
	//				fos.close();
	//			}
	//		} catch (CertificateException e) {
	//			// TODO Auto-generated catch block
	//			e.printStackTrace();
	//		} catch (GeneralSecurityException e) {
	//			// TODO Auto-generated catch block
	//			e.printStackTrace();
	//		}


	//		//以下算法生成一个SM2的用户证书
//			File f1 = new File("d:/SM2Certs/sm2root_hetong.cer");
//			FileInputStream fis = new FileInputStream(f1);
//			int iLen = (int)f1.length();
//			byte[] bRootCert = new byte[iLen];
//			fis.read(bRootCert);
//			fis.close();
//
//			f1 = new File("d:/SM2Certs/sm2root_hetong.pfx");
//			fis = new FileInputStream(f1);
//			iLen = (int)f1.length();
//			byte[] bRootPfx = new byte[iLen];
//			fis.read(bRootPfx);
//			fis.close();
//
//			f1 = new File("d:/SM2Certs/sm2root_hetong_pwd.txt");
//			fis = new FileInputStream(f1);
//			iLen = (int)f1.length();
//			byte[] bPin = new byte[iLen];
//			fis.read(bPin);
//			fis.close();
//
//			try {
//			CertStruct rootCert =  SM2Crypto.CreateUserSM2Pfx("北京", "北京", "北京诚利通数码技术有限公司",
//					"合同演示系统", "合同演示章", bRootCert, bRootPfx, new String(bPin));
//			if(rootCert != null){
//				File f = new File("d:/SM2Certs/test.pfx");
//				FileOutputStream fos = new FileOutputStream(f);
//				fos.write(rootCert.bPfx);
//				fos.close();
//
//				f = new File("d:/SM2Certs/test.cer");
//				fos = new FileOutputStream(f);
//				fos.write(rootCert.bCert);
//				fos.close();
//
//				f = new File("d:/SM2Certs/test.txt");
//				fos = new FileOutputStream(f);
//				fos.write(rootCert.sPin.getBytes());
//				fos.close();
//
//				f = new File("d:/SM2Certs/testbcprv.txt");
//				fos = new FileOutputStream(f);
//				fos.write(rootCert.sPrivateKey.getBytes());
//				fos.close();
//
//				f = new File("d:/SM2Certs/testbcpub.txt");
//				fos = new FileOutputStream(f);
//				fos.write(rootCert.sPublicKey.getBytes());
//				fos.close();
//			}
//		} catch (CertificateException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		} catch (GeneralSecurityException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}


	//	//以下代码生成国办标准的ASN文件
//		String uuid = UUID.randomUUID().toString();
//		File f1 = new File("d:/SM2Certs/sm2root_hetong.cer");
//		FileInputStream fis = new FileInputStream(f1);
//		int iLen = (int)f1.length();
//		byte[] bRootCert = new byte[iLen];
//		fis.read(bRootCert);
//		fis.close();
//
//		f1 = new File("d:/SM2Certs/sm2root_hetong.pfx");
//		fis = new FileInputStream(f1);
//		iLen = (int)f1.length();
//		byte[] bRootPfx = new byte[iLen];
//		fis.read(bRootPfx);
//		fis.close();
//
//		f1 = new File("d:/SM2Certs/sm2root_hetong_pwd.txt");
//		fis = new FileInputStream(f1);
//		iLen = (int)f1.length();
//		byte[] bPin = new byte[iLen];
//		fis.read(bPin);
//		fis.close();
//		String sPsw = new String(bPin);
//
//		f1 = new File("d:/SM2Certs/test.gif");
//		fis = new FileInputStream(f1);
//		iLen = (int)f1.length();
//		byte[] bGif = new byte[iLen];
//		fis.read(bGif);
//		fis.close();
//
//		f1 = new File("d:/SM2Certs/test.cer");
//		fis = new FileInputStream(f1);
//		iLen = (int)f1.length();
//		byte[] bUserCert = new byte[iLen];
//		fis.read(bUserCert);
//		fis.close();
//
//		byte[] bAsn1Seal = GBSeal.CreateGBSeal(uuid, 2, "BJCLTDZYZPT", 2, "合同演示章", bUserCert, "20200324102030Z", "20220901102030Z", "20220701102030Z", "gif", bGif, 40, 40, bRootCert, "1.2.156.10197.1.501", bRootPfx, sPsw);
//
//		File f = new File("d:/SM2Certs/test.asn");
//		FileOutputStream fos = new FileOutputStream(f);
//		fos.write(bAsn1Seal);
//		fos.close();

		//以下代码测试OFD签章
		byte[] bCert = File2byte("D:\\SealInfo\\test.cer");
		byte[] bPub = File2byte("D:\\SealInfo\\testbcpub.txt");
		byte[] bPrv = File2byte("D:\\SealInfo\\testbcprv.txt");
		byte[] bSeal= File2byte("D:\\SealInfo\\test.asn");

		File f = new File("D:/SealInfo/demo.ofd");
		FileInputStream fis = new FileInputStream(f);
		int iLen = (int)f.length();
		byte[] bFile = new byte[iLen];
		fis.read(bFile);
		fis.close();
		byte[] b = OFDServerSign.SignOFD(bFile, "", "", "",
				bCert,bPub,bPrv,bSeal,
				0, null,2,0,0,30,20,2);
		if(b != null)
		{
			f = new File("d:/SealInfo/ok.ofd");
			FileOutputStream fos = new FileOutputStream(f);
			fos.write(b);
			fos.close();
			System.out.println("ok");
		}else{
			System.out.println("no");
		}
	}
}
